const  managerDao  = require('../dao/managerDao')
const Password = require('node-php-password')

/********--------登录函数---------------*********/
module.exports.login = function (username, password, cb) {
    // console.log('登录函数后接收', username, password)
    managerDao.findOne({"mg_name": username}, function (err, manager) {
        if(err || !manager) return cb("用户名不存在");
		if(manager.role_id < 0) {
			return cb("该用户没有权限登录");
		}
        if(manager.role_id != 0 && manager.mg_state != 1) {
			return cb("该用户已经被禁用");
		}
        if(Password.verify(password, manager.mg_pwd)){
			cb(
				null,
				{
					id:manager.mg_id,
					rid:manager.role_id,
					username:manager.mg_name,
					mobile:manager.mg_mobile,
					email:manager.mg_email,
				}
			);
		} else {
			return cb("密码错误");
		}
    })
}

/**-----------------获取所有用户列表------------------ */
module.exports.getAllManagers = function(conditions, cb) {
	if (!conditions.pageNum) return cb('pageNum 参数不合法')
	if (!conditions.pageSize) return cb('pageSize 参数不合法')
	// 关键字搜索获取管理员数量
	managerDao.countByKey(conditions.query, function(err, count){
		let keywords, pageNum, pageSize, offset, limit
		 keywords = conditions.query
		 pageNum = parseInt(conditions.pageNum)
		 pageSize = parseInt(conditions.pageSize)
		 offset = (pageNum - 1) * pageSize
		 if (offset >= count) {
			offset = count
		 }
		 limit = pageSize
		managerDao.findByKey(keywords, offset, limit, function(err, managers) {
			const retMangers = []
			for (idx in managers) {
				const manager = managers[idx]
				let role_name = manager.role_name
				if (!manager.role_id) {
					role_name = '超级管理员'
					manager.role_id = -1
				}
				retMangers.push({
					id: manager.mg_id,
					role_name: role_name,
					role_id: manager.role_id,
					username: manager.mg_name,
					create_time: manager.mg_time,
					mobile: manager.mg_mobile,
					email: manager.mg_email,
					status: manager.mg_state == 1
				})
			}
			const resultData = {}
			resultData.list = retMangers
			resultData.total = count
			cb(err, resultData)
		})
	})
}


/**--------------------获取用户信息-------------------------- */
module.exports.getManager = function (id, cb) {
	managerDao.show(id, (err, manager) => {
		if (err) return cb(err)
		if (!manager) return cb('该管理员不存在')
		cb(null, {
			"id":manager.mg_id,
			"rid":manager.role_id,
			"username":manager.mg_name,
			"mobile":manager.mg_mobile,
			"email":manager.mg_email
		})
	})
}

/**--------------------创建用户-------------------------- */
module.exports.createManager = function (params, cb) {
	managerDao.exists(params.username, (err, isExists) => {
		if (err) return cb(err)
		if (isExists) return cb('用户已存在')
	})
	managerDao.create({
		mg_name: params.username,
		mg_pwd: Password.hash(params.password),
		mg_mobile: params.mobile,
		mg_email: params.email,
		mg_time: Date.parse(new Date())/1000,
		role_id: params.rid
	}, (err, manager) => {
		if (err) return cb('创建失败')
		return cb(null, {
			id: manager.mg_id, // 创建时会自增
			username: manager.mg_name,
			mobile: manager.mg_mobile,
			email: manager.mg_email,
			create_time: manager.mg_time,
			role_id: manager.role_id,
		})
	})
}

/**--------------------更新用户信息-------------------------- */
module.exports.updateManager = function (params, cb) {
	managerDao.update({
		mg_id: params.id,
		mg_mobile: params.mobile,
		mg_email: params.email
	}, (err, manager) => {
		if (err) return cb(err)
		cb(null, {
			id: manager.mg_id,
			username: manager.mg_name,
			role_id: manager.role_id,
			mobile: manager.mg_mobile,
			email: manager.mg_email
		})
	})
}

/**--------------------删除用户-------------------------- */
module.exports.deleteManager = function (id, cb) {
	if (id === 500)  return cb('超级管理员不能删除')
	managerDao.destory(id, (err) => {
		if (err) return cb('删除失败')
		cb(null)
	})
}

/**--------------------为管理员设置角色-------------------------- */
module.exports.setRole = function (id, rid, cb) {
	managerDao.show(id, (err, manager) => {
		if (err || !manager) return cb('管理员ID不存在')
		managerDao.update({
			mg_id: manager.mg_id,
			role_id: rid
		}, (err, mgr) => {
			if (err) return cb('设置失败')
			cb(null, {
				id: mgr.mg_id,
				rid: mgr.role_id,
				username: mgr.mg_name,
				mobile: mgr.mg_mobile,
				email: mgr.mg_email
			})
		})
	})
}
/**--------------------更新管理员状态-------------------------- */
module.exports.updateManagerState = function (id, state, cb) {
    managerDao.show(id, (err, manager) => {
		if (err || !manager) return cb('管理员ID不存在')
		managerDao.update({
			mg_id: manager.mg_id,
			mg_state: state
		}, (err, mgr) => {
			if (err) return cb('设置失败')
			cb(null, {
				id: mgr.mg_id,
				rid: mgr.role_id,
				username: mgr.mg_name,
				mobile: mgr.mg_mobile,
				email: mgr.mg_email,
				mg_state: mgr.mg_state ? 1: 0
			})
		})
	})
}